Fix some const asserts not throwing errors#205
Closed
cmlsharp wants to merge 1 commit intocircify:masterfrom
cmlsharp:master
Closed
Fix some const asserts not throwing errors#205cmlsharp wants to merge 1 commit intocircify:masterfrom cmlsharp:master
cmlsharp wants to merge 1 commit intocircify:masterfrom
cmlsharp:master
Conversation
Contributor
Author
|
Further testing reveals that this change can cause the frontend to slow down substantially on large programs (presumably due to a lot of redundant constant folding, with each call using a fresh, empty cache) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Currently some assertions that can be statically determined to be false, do not cause a compile time error to be thrown, while some do.
For example,
causes this error to be thrown
whereas this essentially identical program does not
(instead circ happily generates a circuit that always returns false)
Needless to say this can make debugging difficult. Luckily, I believe fixing this is a one line change. The culprit seems to be here:
circ/src/front/zsharp/mod.rs
Line 1254 in 2b54efa
Since
expr_implis called withIS_CNST = true, it returnsErrin the latter program sincexis not a const variable. However, as far as I can tell, this check is unnecessary. The relevant matter is whether (after constant folding), the expression evaluates tofalsewhich is what the subsequent call toconst_boolis checking anyway. Hence the solution seems to be to callexpr_implwithIS_CNST = falseinstead.